package com.agri.service.impl;

import com.agri.dto.CropQueryDTO;
import com.agri.entity.Crop;
import com.agri.mapper.CropMapper;
import com.agri.result.Result;
import com.agri.service.CropService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

/**
 * 农产品服务实现类
 * 处理农产品相关的业务逻辑
 *
 * @author Agri-Fin-Sale Team
 * @since 2025-11-05
 */
@Service
public class CropServiceImpl implements CropService {
    @Autowired
    private CropMapper cropMapper;

    @Override
    public Result<?> listCrops(CropQueryDTO queryDTO) {
        QueryWrapper<Crop> wrapper = new QueryWrapper<>();

        // 农产品名称模糊查询（不为空且不为空字符串）
        if (queryDTO.getCropName() != null && !queryDTO.getCropName().trim().isEmpty()) {
            wrapper.like("crop_name", queryDTO.getCropName().trim());
        }

        // 分类ID查询（不为null且大于0）
        if (queryDTO.getCategoryId() != null && queryDTO.getCategoryId() > 0) {
            wrapper.eq("category_id", queryDTO.getCategoryId());
        }

        // 农产品编码精确查询（不为空且不为空字符串）
        if (queryDTO.getCropCode() != null && !queryDTO.getCropCode().trim().isEmpty()) {
            wrapper.eq("crop_code", queryDTO.getCropCode().trim());
        }

        // 价格范围查询（大于0的值才作为查询条件）
        if (queryDTO.getMinPrice() != null && queryDTO.getMinPrice().compareTo(BigDecimal.ZERO) > 0) {
            wrapper.ge("market_price", queryDTO.getMinPrice());
        }
        if (queryDTO.getMaxPrice() != null && queryDTO.getMaxPrice().compareTo(BigDecimal.ZERO) > 0) {
            wrapper.le("market_price", queryDTO.getMaxPrice());
        }

        // 状态查询，默认查询上架状态(status=1)
        // 如果明确指定status=0，则查询下架商品；如果为null，默认查询上架商品
        if (queryDTO.getStatus() != null) {
            wrapper.eq("status", queryDTO.getStatus());
        } else {
            wrapper.eq("status", 1); // 默认只查询上架商品
        }

        // 设置分页参数，确保合理的默认值
        int pageNum = queryDTO.getPageNum() != null && queryDTO.getPageNum() > 0 ? queryDTO.getPageNum() : 1;
        int pageSize = queryDTO.getPageSize() != null && queryDTO.getPageSize() > 0 ? queryDTO.getPageSize() : 10;

        Page<Crop> page = new Page<>(pageNum, pageSize);
        return Result.success(cropMapper.selectPage(page, wrapper));
    }

    @Override
    public Result<?> getCropById(Long id) {
        Crop crop = cropMapper.selectById(id);
        if (crop == null) {
            return Result.fail("农产品不存在");
        }
        return Result.success(crop);
    }

    @Override
    public Result<?> getCropsByCategory(Long categoryId) {
        QueryWrapper<Crop> wrapper = new QueryWrapper<>();
        wrapper.eq("category_id", categoryId)
               .eq("status", 1); // 只查询上架状态的产品
        return Result.success(cropMapper.selectList(wrapper));
    }

    @Override
    public Result<?> searchCrops(String keyword) {
        QueryWrapper<Crop> wrapper = new QueryWrapper<>();
        wrapper.like("crop_name", keyword)
               .or().like("crop_code", keyword)
               .or().like("scientific_name", keyword)
               .eq("status", 1); // 只查询上架状态的产品
        return Result.success(cropMapper.selectList(wrapper));
    }
}